/**
* @author Galihsam [syambudhi@gamatechno.com] - [galihsam@gmail.com]
* @copyright Copyright (c) PT Gamatechno Indonesia
* @package animeFormValidator.js
* @version 01
* @description xxx
* @startDate 2013-06-30
* @lastUpdate 2013-07-01
*
*
	Cara Penggunaan :
	1.	Load Library [gsFormValidator].
	2.	Gunakan attribut -onSubmit- pada form input dengan function name : gsValidate.
		> ex : onsubmit="return gsValidate('field_1|field_2|...','Nama Field Dalam Pesan Error 1|Nama Field Dalam Pesan Error  2|...','Type Validasi 1|Type Validasi 2|...');"
		> parameter pada function tersebut dikategorikan menjadi 3 param, yaitu :
		  - 'field_1|field_2|...' 					= nama field ID pada isian form (harus sesuai/sama dengan field yang bersangkutan).
		  - 'Nama Field Dalam Pesan Error|...' 		= Nama Field yang akan anda tampilkan dalam pesan Error.
		  - 'Type Validasi 1|Type Validasi 2|...' 	= type validasi yang akan dikirim/diverifikasi, untuk type validasi anda dapat melihat pada List Validasi dibawah ini.
		> List Type Validasi yang sudah saya bikin :
		  Type Validasi Tunggal (satu kali validasi) : 
		   - required			= apabila input data yang dikirim tidak boleh kosong.
		   - numeric			= apabila input data yang dikirim diwajbkan berformat angka/numeric => boleh kosong.
		   - email				= apabila input data yang dikirim diwajbkan berformat email => boleh kosong.
		   - file				= apabila input data yang dikirim diwajbkan berformat file [jangan lupa sertakan atribut max size dan ekstensi yang diijinkan].
		                          ex : file[3145728-pdf:PDF:jpg:JPG:png:PNG]
		                          penjelasan :	- file 						=> nama type validasi
		                          				- 3145728 					=> Max Size File/Ukuran maksimal file yaitu 3 MB => dalam Byte [1 MB = 1024 KB = 1048576 Byte].
		                          				- pdf:PDF:jpg:JPG:png:PNG 	=> Ekstensi file yang diperbolehkan untuk di unggah.
		  Type Validasi Kombinasi :
		   - required_numeric 	= artinya input data yang dikirim tidak boleh kosong dan diwajbkan berformat angka/numeric.
		   - required_email		= artinya input data yang dikirim tidak boleh kosong dan diwajbkan berformat email.
		   - required_file 		= artinya input data yang dikirim tidak boleh kosong dan diwajbkan berformat file [jangan lupa sertakan atribut max size dan ekstensi yang diijinkan].
		                          ex : file[3145728-pdf:PDF:jpg:JPG:png:PNG]
		                          penjelasan :	- file 						=> nama type validasi
		                          				- 3145728 					=> Max Size File/Ukuran maksimal file yaitu 3 MB => dalam Byte [1 MB = 1024 KB = 1048576 Byte].
		                          				- pdf:PDF:jpg:JPG:png:PNG 	=> Ekstensi file yang diperbolehkan untuk di unggah.
**/

function gsValidate(param,message,type) {
	var validasi		= param.split("|");
	var pesan 			= message.split("|");
	var tipe 			= type.split("|");
	var panjang_param	= validasi.length;
	var pesan_akhir		= '';
	//alert('coba');
	
	for (i=0;i < panjang_param ; i++ ) {
		var isian	= document.getElementById(validasi[i]).value;
		var endTipe = tipe[i].split("[");
		if(endTipe[0] == 'required'){ if (trim(isian) == '') pesan_akhir = pesan_akhir+''+pesan[i]+' Tidak Boleh Kosong.<br/>'; 
		}else if(endTipe[0] == 'numeric'){
			if (trim(isian) != '') if (!isNumeric(isian)) pesan_akhir = pesan_akhir+''+pesan[i]+' Harus Di Isi Dengan Angka.<br/>'; 
		}else if(endTipe[0] == 'file'){
			if (trim(isian) != '')	{
				var getValTipeF 		= endTipe[1].replace("]","").split("-");
				var inputFileF 			= document.getElementById(validasi[i]);
				var sizeF 				= inputFileF.files[0].size;
				var maxSizeF 			= getValTipeF[0];
				var sizelabelF 			= maxSizeF / 1024;
				var getExtDiijinkanF 	= getValTipeF[1].split(":");
				var namaFileF			= isian;
				var extBerkasF 			= namaFileF.substring(namaFileF.lastIndexOf('.')+1);
				var filterF 			= 0;
				for (k=0;k < getExtDiijinkanF.length ; k++ ) {
					var extDiijinkanF 	= getExtDiijinkanF[k];
					var namaFileF		= isian;
					var extBerkasF 		= namaFileF.substring(namaFileF.lastIndexOf('.')+1);
					if(extBerkasF == extDiijinkanF) filterF = 1;
				}
				if(filterF == 0) pesan_akhir = pesan_akhir+''+pesan[i]+' yang di upload harus ber-ekstensi : '+getExtDiijinkanF+'.<br/>'; 
				if (sizeF > maxSizeF) pesan_akhir = pesan_akhir+''+pesan[i]+' yang di upload harus berukuran kurang dari : '+sizelabelF+' MB.<br/>'; 
			}
		}else if(endTipe[0] == 'email'){
			if (trim(isian) != '') if (!isEmail(isian)) pesan_akhir = pesan_akhir+''+pesan[i]+' Yang Anda Isikan Tidak Valid.<br/>'; 
		}else if(endTipe[0] == 'required_numeric')	{
			if (trim(isian) != ''){ if (!isNumeric(isian)) pesan_akhir = pesan_akhir+''+pesan[i]+' Harus Di Isi Dengan Angka Dan Tidak Boleh Kosong.<br/>'; 
			}else{ pesan_akhir = pesan_akhir+''+pesan[i]+' Tidak Boleh Kosong.<br/>'; }
		}else if(endTipe[0] == 'required_file')	{
			if (trim(isian) != '')	{
				var getValTipe 		= endTipe[1].replace("]","").split("-");
				var inputFile 		= document.getElementById(validasi[i]);
				var size 			= inputFile.files[0].size;
				var maxSize 		= getValTipe[0];
				var sizelabel 		= maxSize / 1024;
				var getExtDiijinkan = getValTipe[1].split(":");
				var namaFile		= isian;
				var extBerkas 		= namaFile.substring(namaFile.lastIndexOf('.')+1);
				var filter 			= 0;
				for (j=0;j < getExtDiijinkan.length ; j++ ) {
					var extDiijinkan 	= getExtDiijinkan[j];
					var namaFile		= isian;
					var extBerkas 		= namaFile.substring(namaFile.lastIndexOf('.')+1);
					if(extBerkas == extDiijinkan) filter = 1;
				}
				if(filter == 0) pesan_akhir = pesan_akhir+''+pesan[i]+' yang di upload harus ber-ekstensi : '+getExtDiijinkan+'.<br/>'; 
				if (size > maxSize) pesan_akhir = pesan_akhir+''+pesan[i]+' yang di upload harus berukuran kurang dari : '+sizelabel+' MB.<br/>'; 
			}else{
				pesan_akhir = pesan_akhir+''+pesan[i]+' Tidak Boleh Kosong.<br/>'; 
			}
		//Function Confirm Password
		}else if(endTipe[0] == 'password'){
			if (trim(isian) != '') if (!isPassword(isian)) pesan_akhir = pesan_akhir+''+pesan[i]+'<br/>';
		}else{
			if (trim(isian) == '') pesan_akhir = 'Validasi JS Error.<br/>'; 
		}

	}
	//alert('pesanku '+pesan_akhir);
	if(pesan_akhir !='' ) {
		$('#showGsAlert').slideToggle();
		$('#showGsAlert').html("<b><u>Perhatian :</u></b><br/>"+pesan_akhir);
		setTimeout(function() {
			$( "#showGsAlert:visible" ).removeAttr( "style" ).fadeOut();
		}, 5000 );
		return false;
	} else {
		return true;
	}
}

function isEmail(gsEmail){
	var regex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
	if(gsEmail == "" || regex.test(gsEmail)==false){ 
		return false;
	} else {
		return true;
	} 
}

function isNumeric(gsInteger){
    var c = gsInteger.charAt();
    if (((c < "0") || (c > "9"))) return false;
    else return true;
}

function trim(str){
	return ltrim(rtrim(str));
}

function ltrim(str){
	return str.replace(/^[\s]+/g,'');
}

function rtrim(str){
	return str.replace(/[\s]+$/g,'');
}

//Function Confirm Password
function isPassword(){	
	var validator = $("#ubahPassword").validate({
		rules: {        	        		
			confirmpassword:{
				equalTo: "#password"
		    }		
    	},  	                          
	    messages: {
    		confirmpassword :""
	    }
	});
	if(validator.form()){
		return true;
	}
}